package com.xiaoKe.zhonghzu.global.tool;

/**
 * @ProjectName : xiaoke-pad-zhongzhu
 * @Author : Shijingna
 * @Time : 2024/7/15 15:12
 * @Description : 提交用来判断字段不能为空
 *
 *  在实体类添加
 *  *     @NotNullOrEmpty(errorMessage = "邮箱不能为空")
 *
 * User user = new User();
 *         user.setName("John Doe");
 *         // 故意不设置email
 *
 *         try {
 *             AnnotationProcessor.validateAndProcess(user);
 *             System.out.println("验证通过");
 *         } catch (IllegalArgumentException e) {
 *             System.err.println(e.getMessage());
 *         }
 *
 *   提交的时候检查就会提示出来
 *   有待测试
 */
import java.lang.reflect.Field;

public class AnnotationProcessor {

    public static <T> void validateAndProcess(T object) {
        try {
            Field[] fields = object.getClass().getDeclaredFields();
            for (Field field : fields) {
                if (field.isAnnotationPresent(NotNullOrEmpty.class)) {
                    field.setAccessible(true);
                    Object value = field.get(object);
                    if (value == null || (value instanceof String && ((String) value).isEmpty())) {
                        // 这里可以根据需要处理null或空字符串，例如抛出异常、设置默认值等
                        String errorMessage = field.getAnnotation(NotNullOrEmpty.class).errorMessage();
                        throw new IllegalArgumentException(errorMessage);
                    }
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    public static <T> void validateAndProcessValue(T object) {
        try {
            Field[] fields = object.getClass().getDeclaredFields();
            for (Field field : fields) {
                if (field.isAnnotationPresent(NotNullOrEmpty.class)) {
                    field.setAccessible(true);
                    Object value = field.get(object);
                    if (value == null || (value instanceof String && ((String) value).isEmpty())) {
                        // 这里可以根据需要处理null或空字符串，例如抛出异常、设置默认值等
                        String errorMessage = field.getAnnotation(NotNullOrEmpty.class).value();
                        field.set(object,errorMessage);

                    }
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
